<?php
// PC端 OA 外勤拜访
namespace Home\Controller;
use Think\Controller;
class OutController extends CommonController {
    public function _initialize(){
        parent::_initialize();
    }
    
    // 首页
    public function index(){
        $p = I('get.p');
        $p = empty($p) ? 1 : $p;

        $search_type = I('param.search_type'); // 搜索条件 销售经理才有  3种情况：全部的、自己的、下属的 
        $date_begin = I('param.date_begin'); // 搜索条件 开始日期
        $date_end   = I('param.date_end');   // 搜索条件 结束日期
        if( !empty($date_begin) ){ 
            $map['visit_time'] = array('EGT',strtotime($date_begin)); 
        }
        if( !empty($date_end) ){ 
            $map['visit_time'] = array('ELT',strtotime($date_end));
        }

        $oaLevel = session('USER_AUTH.oa_level');  // 用户基本信息 session
        if($oaLevel == 1){  // 普通销售员 OA权限
            $map['uid'] = session('USER_AUTH.userid');
        }else if($oaLevel == 2){  // 销售经理 OA权限
            switch ($search_type) {  // 查询情况：1、所有的(自己和下属)；2、自己；3、下属
                case 'my': $map['uid'] = session('USER_AUTH.userid'); break;
                case 'xiashu': 
                    $uids = M('user')->where(array('oa_level'=>1))->getField('user_id',true);
                    $map['uid'] = array('in',$uids);
            }
        }

        $count = M('out')->where($map)->count();
        if($count){
            if($count == ($p-1)*10){ $p--; } // 删除记录时，判断当前页是否还有数据
            $list = M('out')->where($map)->page($p.',10')->order('id desc')->select();
            $Page = new \Think\Page($count,10);// 实例化分页类 传入总记录数和每页显示的记录数
            // $pageStyle = C('PAGE_STYLE');
            // $Page ->setConfig('prev','上一页');
            // $Page ->setConfig('next','下一页');
            // $Page ->setConfig('theme',$pageStyle);
            $Page ->parameter['search_type'] = $search_type;  // 分页链接 传值 销售经理才有  查询情况
            $Page ->parameter['date_begin']  = $date_begin;   // 分页链接 传值 开始日期
            $Page ->parameter['date_end']    = $date_end;     // 分页链接 传值 结束日期

            $show = $Page->show();// 分页显示输出

            $outList = get_outs_list($list,true);
        }else{
            $outList = array();
            $this->assign('empty','<tr class="text-c odd" role="row"><td colspan="10">暂无数据</td></tr>');
        }

        $this->assign('outList',$outList);
        $this->assign('page',$show);// 赋值分页输出
        $this->assign('count',$count);
        $this->assign('search_type',$search_type); // 赋值 搜索条件 销售经理才有  查询情况
        $this->assign('date_begin',$date_begin);   // 传值 搜索条件 开始日期
        $this->assign('date_end',$date_end);       // 传值 搜索条件 结束日期
        $this->assign('p',$p);
        $this->display();
    }

    // 详情页
    public function detail(){
    	$id = I('get.id');
        $map['id'] = $id;
    	$arr = M('out')->where($map)->select();
    	$outArr = get_outs_list($arr,true);
        $this->assign('outArr',$outArr[0]);	
        //p($outArr);
    	$this->display();
    }

    // 删除（单个/批量）
    public function del(){
        $id = I('get.id');
        $p  = I('get.p');
        if($id){
            $map1['id'] = array('in',$id);
            $map2['fid'] = array('in',$id);
            $rel1 = M('out')->where($map1)->delete();
            $rel2 = M('out_content')->where($map2)->delete();
            $this->redirect('out/index',array('p'=>$p));
        }
    }

    // 添加页
    public function add(){
        $cid = I('get.cid');  // 选择客户后 传来 的 客户id
        if($cid){  // 如果有
            $client_name = I('get.client_name');  // 选择客户后 传来 的 客户名称
            $this->assign('cid',$cid);
            $this->assign('client_name',$client_name);
        }
        $this->display();
    }

    // 添加 提交
    public function addCheck(){
        $cid = I('post.cid');
        if(!$cid){
            $msg = array('state'=>500,'content'=>'请重新选择客户');
        }else{
            $data['uid'] = session('USER_AUTH.userid');
            $data['cid'] = $cid;
            $data['source'] = 2;
            $data['location_in'] = I('post.location_in');
            $visit_time = I('post.visit_time');
            $data['visit_time'] = strtotime($visit_time);
            $visit_time = I('post.appoint_time');
            $data['appoint_time'] = strtotime($visit_time);
            $rel = M('out')->add($data);
            if($rel){
                $num = I('post.num');
                for($i=1; $i<=$num; ++$i){
                    $content = I('post.content'.$i);
                    if(trim($content)){
                        $contentList[] = array('fid'=>$rel,'content'=>$content);
                    }
                }
                $re = M('out_content')->addAll($contentList);
                $msg = array('state'=>200, 'content'=>'添加成功');
            }else{
                $msg = array('state'=>500, 'content'=>'添加失败');
            }
        }
        $this->ajaxReturn($msg);
    }

    // 选择客户
    public function choice(){
        $p = I('get.p');
        $p = empty($p) ? 1 : $p;
        $client_name = I('param.client_name');   // 搜索条件 结束日期
        if( !empty($client_name) ){ 
            $map['client_name'] = array('LIKE','%'.$client_name.'%'); 
        }
        $map['uid'] = session('USER_AUTH.userid');
        $count = M('client')->where($map)->count();
        if($count){
            $clientList = M('client')->where($map)->field('id,client_name,shop_manager,location')->page($p.',10')->order('id desc')->select();
            $Page = new \Think\Page($count,10);// 实例化分页类 传入总记录数和每页显示的记录数
            $pageStyle = C('PAGE_STYLE');  // 获取分页样式主题
            $Page ->setConfig('prev','上一页');
            $Page ->setConfig('next','下一页');
            $Page ->setConfig('theme',$pageStyle);
            $Page ->parameter['client_name'] = $client_name;     // 分页链接 传值 结束日期
            $show = $Page->show();// 分页显示输出
        }else{
            $clientList = array();
        }

        $this->assign('empty','<tr class="text-c odd" role="row"><td colspan="4">暂无数据</td></tr>');
        $this->assign('clientList',$clientList);
        $this->assign('page',$show);// 赋值分页输出
        $this->assign('client_name',$client_name);  // 赋值 搜索条件 客户名称
        $this->assign('p',$p);
        $this->display();
    }

    // 修改页
    public function edit(){
        $id = I('get.id');
        $p  = I('get.p');
        $map['id'] = $id;
        $arr = M('out')->where($map)->select();
        $outArr = get_outs_list($arr,true);
        $this->assign('outArr',$outArr[0]);
        $this->assign('p',$p); 
        $this->display();

    }

    // 修改 提交
    public function editCheck(){
        $id = I('post.id');
        $data['id'] = $id;
        $data['location_in'] = I('post.location_in');
        $visit_time = I('post.visit_time');
        $data['visit_time'] = strtotime($visit_time);
        $appoint_time = I('post.appoint_time');
        $data['appoint_time'] = strtotime($appoint_time);

        $rel = M('out')->save($data);
        
        $num  = I('post.num');
        $list = M('out_content')->where(array('fid'=>$id))->field('id,content')->select(); // 查询出外勤所有 内容id
        // 1、把查询出的内容数组键名替换为 相应的 内容id
        foreach($list as $val){
            $keyArr[] = $val['id'];
        }
        $contentList = array_combine($keyArr,$list);  

        // 2、原有的  内容行
        for ($i=1; $i<=count($contentList); ++$i) {  
            $conid = I('post.conid'.$i);  // 获取前台传来的 内容id
            $content = I('post.content'.$i);  // 前台传来的 内容
            if($content !== $contentList[$conid]['content']){  // 判断对应内容行内容是否发生修改
                if(trim($content)){  // 判断内容行是否为真
                    $data = array('id'=>$conid,'content'=>$content);
                    $rel = M('out_content')->save($data);
                }else{  // 为真时  删除该内容行
                    $rel = M('out_content')->where(array('id'=>$conid))->delete();
                }
                if(!$rel){ // 数据更新/删除 出错
                    $this->ajaxReturn(array('state'=>500, 'content'=>'修改失败')); 
                    die; 
                }
            }
        }

        // 3、新增的  内容行
        if( $num > count($list) ){ 
            for ($i=count($list)+1; $i<=$num ; ++$i) {  
                $content = I('post.content'.$i);
                if(trim($content)){
                    $addList[] = array('fid'=>$id,'content'=>$content);
                }
            }
            if($addList){  // 有新增行 且新增行不为空
                $rel = M('out_content')->addAll($addList);
                if($rel){
                    $this->ajaxReturn(array('state'=>200, 'content'=>'修改成功')); 
                    die; 
                }else{
                    $this->ajaxReturn(array('state'=>500, 'content'=>'修改失败'));  
                    die; 
                }
            }else{  // 有新增行 但新增行为空
                $this->ajaxReturn(array('state'=>200, 'content'=>'修改成功'));
                die;  
            }
            
        }

        // 无任何修改
        $this->ajaxReturn(array('state'=>200, 'content'=>'修改成功'));
        die;
        

    }


}